"""
订单管理
主要以模态窗口方式实现添加操作

"""
import json
import random
from datetime import datetime
from django.shortcuts import render, HttpResponse, redirect

from app import models
from app.models import Order
from app.utils.form import OrderModelForm
# 免除crsf认证，如果ajax请求时，不是表单提交所以会很复杂，导入他就行
from django.views.decorators.csrf import csrf_exempt

from app.utils.pagination import Pagination


def order_list(request):
    """ 订单列表 """
    # 猎取全部记录
    queryset = models.Order.objects.all().order_by('-id')

    page_object = Pagination(request, queryset)  # 实例化分页导航条类
    page_queryset = page_object.page_queryset  # 获得分完页的数据结果
    # 生成分页导航条
    page_nav = page_object.html()

    form = OrderModelForm()
    content = {
        'form': form,
        'queryset': page_queryset,  # 分完页的数据结果
        'page_nav': page_nav  # 生成的页码导航条
    }
    return render(request, 'order_list.html', content)


@csrf_exempt
def order_add(request):
    """新建订单"""
    # 对ajax提交近来的数据进行校验
    form = OrderModelForm(data=request.POST)
    print(form)
    if form.is_valid():
        form.instance.oid = datetime.now().strftime('%Y%m%d%H%M%S') + str(random.randint(1000, 9999))
        # 在models.py中定义的是user，是有主键约束的，所以django在生成数据表结构时，会自动加一个_id
        form.instance.user_id = request.session['info']['id']

        form.save()  # 向数据表添加数据
        # 将标记传回前端
        data_dict = {"status": True, }
        return HttpResponse(json.dumps(data_dict))
    # 如果有错误
    # 将生成错误以json格式返回给前端
    data_dict = {"status": False, 'error_msg': form.errors}
    return HttpResponse(json.dumps(data_dict, ensure_ascii=False))  # ensure_ascii编码格式


def order_delete(request):
    """删除订单"""
    # nid = request.GET['data']
    Order.objects.filter(id=request.GET.get('nid')).delete()
    finish = {"status": True, }
    return HttpResponse(json.dumps(finish))


def order_detail(request):
    """ 获取订单的全部信息，返回给前端显示，用于修改使用 """
    """ 方式1 返回的是一个对象取数据结果时较复杂"""
    # uid = request.GET.get('nid')
    # print(uid)
    # row_object = models.Order.objects.filter(id=uid).first()
    # if not row_object:  # 数据不存在
    #     return HttpResponse(json.dumps({'status': False, 'error': '数据不存在!'}))
    # print(row_object)
    # # row_object本返回的是一个对象，不能够直接JSON，所以手对构建字典
    # result_dict = {
    #     'status': True,
    #     'data': {
    #         'title': row_object.title,
    #         'price': row_object.price,
    #         'status': row_object.status,
    #     },
    # }
    # return HttpResponse(json.dumps(result_dict))

    """ 方式2 """
    uid = request.GET.get('nid')
    print(uid)
    row_dict = models.Order.objects.filter(id=uid).values('title', 'price', 'status').first()
    if not row_dict:  # 数据不存在
        return HttpResponse(json.dumps({'status': False, 'error': '数据不存在!'}))
    # row_dict 返回的是一个字典
    result_dict = {
        'status': True,
        'data': row_dict
    }
    return HttpResponse(json.dumps(result_dict))


@csrf_exempt
def order_edit(request):
    uid = request.GET.get('uid')
    # 1.先查询到该条记录
    # 2.拿到POST请求过来的数据（data=request.POST），将将查询到数据对象传递给form（instance=row_data）
    row_data = Order.objects.filter(id=uid).first()
    if not row_data:
        data_dict = {"status": False, "tips": '数据不存在,请刷新后重试'}
        return HttpResponse(json.dumps(data_dict, ensure_ascii=False))  # ensure_ascii编码格式

    # POST请求
    form = OrderModelForm(data=request.POST, instance=row_data)  # 拿到所有提交过来的数据
    if form.is_valid():  # 数据校验
        form.save()  # 向 model = UserInfo 定义的表保存数据
        # 将标记传回前端
        data_dict = {"status": True, }
        return HttpResponse(json.dumps(data_dict))

    # 如果有错误
    # 将生成错误以json格式返回给前端
    data_dict = {"status": False, 'error_msg': form.errors}
    return HttpResponse(json.dumps(data_dict, ensure_ascii=False))  # ensure_ascii编码格式
